package pe.gob.osce.sirenas.wd.jsf.bean.administracion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.primefaces.context.RequestContext;

import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.BusquedaFichaDTO;
import pe.gob.osce.sirenas.model.BusquedaFiscalizacionDTO;
import pe.gob.osce.sirenas.model.FichaArbitralDTO;
import pe.gob.osce.sirenas.model.PersonaDTO;
import pe.gob.osce.sirenas.svc.BusquedaFichaArbitralAdminServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarFichaArbitroServiceLocal;
import pe.gob.osce.sirenas.wd.util.ConstanteWeb;
import pe.gob.osce.sirenas.wd.util.RepositorioDatos;
import pe.gob.osce.sirenas.wd.util.UBaseManage;

@ManagedBean(name="bandejaBusquedaBean")
@SessionScoped
public class BandejaBusquedaBean extends UBaseManage implements Serializable{

	/**
	 */
	private static final long serialVersionUID = 8223786763692900159L;

	/**
	 * Resumen.	Metodo que iniciliza la bandeja de evaluacion de quejas
	 * @return cadena mapeada para la navegacion, tipo String.
	 */
	@EJB
	private	BusquedaFichaArbitralAdminServiceLocal	busquedaFichaArbitralAdminLocal;
	@EJB
	private	RegistrarFichaArbitroServiceLocal	registrarFichaArbitroService;
	
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteWeb.PROPERTIES);
	
	private RepositorioDatos repositorio;
	
	private	PersonaDTO persona;
	private FichaArbitralDTO fichaArbitralDTO;
	private	List<PersonaDTO> listPersona;
	private BusquedaFichaDTO busquedaFicha;
	private List<BusquedaFichaDTO> listBusquedaFicha;
	private List<BusquedaFichaDTO> listGenerarFisca;
	private List<BusquedaFichaDTO> listBusquedaFichaPersona;
	private List<BusquedaFichaDTO> listaFichasTemporal;
	private BusquedaFichaDTO FichasEnProcesoNotificacion;
	private List<BusquedaFichaDTO> listaFichasANotificar;

	@PostConstruct
	public void init(){
		inicialidadObjetos();
		repositorio=obtenerRepositorioDatos();
	}
	public String verBandejaBusquedaFicha() {
		System.out.println("Entrandos a mi metodo");
		
		inicialidadObjetos();
		repositorio=obtenerRepositorioDatos();
		System.out.println("Iniciacion verRegistroArbitro");
		return ConstanteWeb.RPTA_BANDEJABUSQUEDAFICHA;
	}
	
	
	public void agregarFichaSeleccion(){
		int contador=0;
		try {			
			if(!this.listaFichasTemporal.isEmpty()){
				for (BusquedaFichaDTO fichaSeleccionada : this.listaFichasTemporal) {
					if(!estaEnLista(fichaSeleccionada.getIdFicha())){

						this.FichasEnProcesoNotificacion=new BusquedaFichaDTO();
						FichasEnProcesoNotificacion.setIdFicha(fichaSeleccionada.getIdFicha());
						
						//FichasEnProcesoNotificacion.setCodBloque(codBloque);
						FichasEnProcesoNotificacion.setApellidos(fichaSeleccionada.getApellidos() );
						FichasEnProcesoNotificacion.setNombres(fichaSeleccionada.getNombres() );
						FichasEnProcesoNotificacion.setNombreCompleto(fichaSeleccionada.getNombreCompleto());
						FichasEnProcesoNotificacion.setNumDocumento(fichaSeleccionada.getNumDocumento());
						
						//listaFichasANotificar.setIdEstadoProceso(repositorio.getIdEstadoLista(ConstanteWeb.EST_GENERADO));
						this.listaFichasANotificar.add(FichasEnProcesoNotificacion);
						contador++;
					}else{
						setMensajeroInfo("Ficha ya se encuentra en Lista");
					}
				}			
				setMensajeroInfo("Se agregaron "+contador+" registros");
				
				RequestContext.getCurrentInstance().update("idFormGenerarFiscalizacion");	
				RequestContext.getCurrentInstance().update("gridFormGenerarFiscalizacion");	
				RequestContext.getCurrentInstance().update("listaFichasFiscalizables");		
			}
			
		} catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}
	
	public Boolean estaEnLista(Long idFicha){
		for (BusquedaFichaDTO fichaSeleccionada : this.listBusquedaFicha) {
			if(fichaSeleccionada.getIdFicha()==idFicha){
				return true;
			}
		}	
		return false;
	}
	
	
	private void inicialidadObjetos()
	{
		this.persona= new PersonaDTO();
		this.busquedaFicha= new BusquedaFichaDTO();
		this.listBusquedaFicha = new ArrayList<BusquedaFichaDTO>();
		this.listGenerarFisca= new  ArrayList<BusquedaFichaDTO>();	
		this.listBusquedaFichaPersona= new ArrayList<BusquedaFichaDTO>();
	}
	
	public void cargarDatosFicha(Long idFicha){
		AuditoriaDTO auditoriaDTO=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		try {
			fichaArbitralDTO=new FichaArbitralDTO();
			fichaArbitralDTO.setIdFicha(idFicha);
			fichaArbitralDTO=registrarFichaArbitroService.obtenerFichaArbitral(fichaArbitralDTO);
			String[] descEstado=repositorio.getDescriptoresEstadoLista(fichaArbitralDTO.getEstadoFicha().getIdEstado());
			fichaArbitralDTO.getEstadoFicha().setNomEstado(descEstado[2]);
			
			if(fichaArbitralDTO.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.ARBITRO.toString())){
				if(fichaArbitralDTO.getIndModalidadArbitro()!=null){
					fichaArbitralDTO.setModalidadArbitro(repositorio.getDescModalidadArbitraje(fichaArbitralDTO.getIndModalidadArbitro().longValue() ));
				}else{
					fichaArbitralDTO.setModalidadArbitro("No registra");
				}
				
			}if(fichaArbitralDTO.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString())){
				fichaArbitralDTO.setModalidadArbitro(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString());
			}
			
			establecerObjetoSession(ConstanteWeb.FICHA_REGISTRO, fichaArbitralDTO);
			
			auditoriaDTO.setVerFicha(true);
			if(fichaArbitralDTO.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.ARBITRO.toString())){
				auditoriaDTO.setEsArbitro(true);
			}else{
				auditoriaDTO.setEsArbitro(false);				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
	
	public void miMegodo(){
		String metodo="hola";
		System.out.println(metodo);
	}
	
	public void buscarFichaRegistradas(){
		
		List<BusquedaFichaDTO> listBusquedaFichaDTO=null;
		BusquedaFichaDTO busquedaFichaDTO=null;
		try {
			busquedaFichaDTO=this.busquedaFicha.clone();
//			busquedaFichaDTO.setFecInicio(busquedaFichaDTO.getFecInicio().);
			
			this.listBusquedaFicha= new ArrayList<BusquedaFichaDTO>();
			listBusquedaFichaDTO=busquedaFichaArbitralAdminLocal.obtenerFichaArbitral(busquedaFichaDTO);
			
			for (BusquedaFichaDTO busquedaFicha : listBusquedaFichaDTO) {
				//busquedaFicha.setDescModadalidadArbitraje(repositorio.getLabelModalidadArbitraje(busquedaFicha.getIndModalidadArbitraje()));
				busquedaFicha.setDescTipoDocumento(repositorio.getLabelParametro(busquedaFicha.getIndTipoDocumento()));
				String[] dataEstado=repositorio.getDescriptoresEstadoLista(busquedaFicha.getIdEstadoFicha());
				busquedaFicha.setDescEstadoFicha(dataEstado[2]);
				busquedaFicha.setAmonestacion("0");
			}
			this.listBusquedaFicha=listBusquedaFichaDTO;
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
	}
	
	
	
	
	
	
	
	public List<BusquedaFichaDTO> getListBusquedaFicha() {
		return listBusquedaFicha;
	}
	public void setListBusquedaFicha(List<BusquedaFichaDTO> listBusquedaFicha) {
		this.listBusquedaFicha = listBusquedaFicha;
	}
	public List<BusquedaFichaDTO> getListGenerarFisca() {
		return listGenerarFisca;
	}
	public void setListGenerarFisca(List<BusquedaFichaDTO> listGenerarFisca) {
		this.listGenerarFisca = listGenerarFisca;
	}
	public List<BusquedaFichaDTO> getListBusquedaFichaPersona() {
		return listBusquedaFichaPersona;
	}
	public void setListBusquedaFichaPersona(
			List<BusquedaFichaDTO> listBusquedaFichaPersona) {
		this.listBusquedaFichaPersona = listBusquedaFichaPersona;
	}
	public BusquedaFichaDTO getBusquedaFicha() {
		return busquedaFicha;
	}
	public void setBusquedaFicha(BusquedaFichaDTO busquedaFicha) {
		this.busquedaFicha = busquedaFicha;
	}
	public List<BusquedaFichaDTO> getlistBusquedaFicha() {
		return listBusquedaFicha;
	}
	public void setlistBusquedaFicha(List<BusquedaFichaDTO> listBusquedaFicha) {
		this.listBusquedaFicha = listBusquedaFicha;
	}
	public PersonaDTO getPersona() {
		return persona;
	}
	public void setPersona(PersonaDTO persona) {
		this.persona = persona;
	}
	public List<PersonaDTO> getListPersona() {
		return listPersona;
	}
	public void setListPersona(List<PersonaDTO> listPersona) {
		this.listPersona = listPersona;
	}


	public List<BusquedaFichaDTO> getListaFichasTemporal() {
		return listaFichasTemporal;
	}


	public void setListaFichasTemporal(List<BusquedaFichaDTO> listaFichasTemporal) {
		this.listaFichasTemporal = listaFichasTemporal;
	}


	public List<BusquedaFichaDTO> getListaFichasANotificar() {
		return listaFichasANotificar;
	}


	public void setListaFichasANotificar(
			List<BusquedaFichaDTO> listaFichasANotificar) {
		this.listaFichasANotificar = listaFichasANotificar;
	}


	public BusquedaFichaDTO getFichasEnProcesoNotificacion() {
		return FichasEnProcesoNotificacion;
	}


	public void setFichasEnProcesoNotificacion(
			BusquedaFichaDTO fichasEnProcesoNotificacion) {
		FichasEnProcesoNotificacion = fichasEnProcesoNotificacion;
	}



	
}
